package com.kehao.leetcode.order;

import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Leetcode2170 {
    public int minimumOperations(int[] nums) {
        Map<Integer, Integer> map1 = new HashMap<>();
        Map<Integer, Integer> map2 = new HashMap<>();
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            if (i % 2 == 0) {
                Integer count = map1.computeIfAbsent(nums[i], key -> 0);
                map1.put(nums[i], count + 1);
            } else {
                Integer count = map2.computeIfAbsent(nums[i], key -> 0);
                map2.put(nums[i], count + 1);
            }
        }
        List<Map.Entry<Integer, Integer>> list1 = map1.entrySet().stream().sorted((e1, e2) -> e2.getValue() - e1.getValue()).collect(Collectors.toList());
        List<Map.Entry<Integer, Integer>> list2 = map2.entrySet().stream().sorted((e1, e2) -> e2.getValue() - e1.getValue()).collect(Collectors.toList());
        if (list1.size() < 1 || list2.size() < 1) return 0;
        Integer maxCount1 = list1.get(0).getValue();
        Integer maxCount2 = list2.get(0).getValue();
        if (!list1.get(0).getKey().equals(list2.get(0).getKey())) {
            return (n - maxCount1 - maxCount2);
        } else {
            int value1 = 0;
            int value2 = 0;
            if (list1.size() >= 2) value1 = list1.get(1).getValue();
            if (list2.size() >= 2) value2 = list2.get(1).getValue();
            if (maxCount2 + value1 > maxCount1 + value2) {
                return (n - value1 - maxCount2);
            } else {
                return (n - value2 - maxCount1);
            }
        }
    }

    @Test
    public void test01() {
        int i = minimumOperations(new int[]{2, 1, 2, 2, 2, 2});
        System.out.println(i);
    }
}
